<?php 


// 提醒消息的方法
// $msg = 消息文案
// $url = 跳转地址
function ShowMsg($msg = '未知消息', $url = '')
{
    // history.go() 不会刷新界面
    // location.href 刷新界面
    
    //跳转地址如果为空就返回上一页
    if(empty($url))
    {
        echo "<script>alert('$msg'); history.go(-1)</script>";
        return false;
    }else
    {
        //有地址就跳转到给的地址界面去
        echo "<script>alert('$msg');location.href=`$url`;</script>";
    }
}


/**
 * @name 单条查询
 * @author K2218@qq.com
 * @param $sql 要执行sql语句
 * @return 返回管理员信息数组
 */
function find($sql)
{
    //函数内想要拿全局变量
    global $db;

    //执行sql语句，返回执行结果
    $res = mysqli_query($db, $sql);

    //判断语句是否执行成功
    if(!$res){

        //打印出执行的错误信息
        echo mysqli_error($db);
        exit;
    }

    //从结果中捞出数据，并返回
    return mysqli_fetch_assoc($res);
}

/**
 * @name 多条查询
 * @author K2218@qq.com
 * @param $sql 要执行sql语句
 * @return 返回查询信息数组 二维数组
 */
function all($sql)
{
    global $db;

    //执行语句
    $res =mysqli_query($db,$sql);

    //判断语句是否执行成功
    if(!$res){
        //输出错误信息
        echo mysqli_errno($db);
        exit;
    }

    //执行结果中返回数据
    return mysqli_fetch_all($res,MYSQLI_ASSOC);
}

/**
 * @name 更新sql语句方法
 * @param $table 表名
 * @param $data 更新数据
 * @param $where 条件
 */
function update($table, $data = [], $where = 1)
{
    global $db;
    global $pre_;

    //真正的表名
    $table = $pre_.$table;

    //判断数据是否为空
    if(empty($data)){
        ShowMsg('更新的数据为空');
        exit;
    }

    $str = "";

     foreach($data as $key=>$item)
    {
        $str .= "`$key` = '$item',";
    }
    //干掉最后一个,元素
    //第二个参数，给什么内容 就可以去掉这个内容
    $str = trim($str, ",");

    //UPDATE 表名 SET `字段`='值', `字段`='值' WHERE 条件
    $sql = "UPDATE $table SET $str WHERE $where";

    //执行sql语句
    $res = mysqli_query($db, $sql);
    // 判断执行是否成功
    if(!$res){
        echo mysqli_error($db);
        exit;
    }

    //如果执行成功返回 影响行数
    return mysqli_affected_rows($db);
}


/**
 * @name 插入数据的方法
 * @param $table 表名
 * @param $data 插入数据
 * @return 返回插入的自增id
 */
function add($table, $data)
{
    //引入全局变量
    global $pre_;
    global $db;

    //拼接完整的表名称
    $table = $pre_.$table;


    //拼接sql 语句
    // INSERT INTO 表名(`字段1`,`字段2`)VALUES('值1','值2')

    //提取数组中所有的key索引，放到一个新数组中
    $keys = array_keys($data);

    //将 数组 变成 字符串
    // 字段1`,`字段2`,`字段3
    $str = "`".implode('`,`',$keys)."`";
    $val = "'".implode("','",$data)."'";

    //拼装最后完整的sql语句
    $sql = "INSERT INTO $table($str)VALUES($val)";

    //调试
    // echo $sql;
    // exit;

    //执行
    $res = mysqli_query($db, $sql);

    //判断语句是否执行成功
    if(!$res){
        echo mysqli_errno($db);
        exit;
    }

    //如果没有错误，返回插入的自增id
    return mysqli_insert_id($db);

}


/**
 * @name 删除数据的方法
 * @param $table 表名
 * @param $where 条件
 * @return 返回影响行数
 */
function delete($table, $where = 1)
{
    //引入全局变量
    global $db;
    global $pre_;

    //表全名
    $table = $pre_.$table;

    //组装sql语句
    $sql = "DELETE FROM $table WHERE $where";
    
    //执行sql语句
    $res = mysqli_query($db, $sql);

    //判断语句是否执行成功
    if(!$res){
        echo mysqli_error($db);
        exit;
    }

    //如果成功，返回影响行数
    return mysqli_affected_rows($db);
}




//验证是否登录
function AuthLogin()
{
    //引用全局变量
    global $pre_;

    $auth = isset($_SESSION['auth']) ? $_SESSION['auth'] : [];


    //为空说明没有登录
    if(empty($auth)){
        ShowMsg('请登录', 'login.php');
        exit;
    }

    //要获取出id 和 mobile手机号
    $id = isset($auth['id']) ? $auth['id'] : 0;
    $mobile = isset($auth['mobile']) ? $auth['mobile'] : '';

    //根据条件验证 管理员是否存在
    $sql = "SELECT * FROM {$pre_}admin WHERE id = $id AND mobile = '$mobile'";

    //查询一条
    $login = find($sql);

    //如果没有找出信息
    if(!$login){
        //注销整个会话
        session_destroy();

        //非法登录，并跳转到登录界面
        ShowMsg('非法登录', 'login.php');
        exit;
    }

    //返回当前登录人信息
    return $login;
}


/**
 * @name 文件上传函数
 * @param $name input name 名称
 * @param $path 上传所存放的路径
 * @param $size 文件限制的大小
 * @param $type 文件上传限制的类型
 * @return 返回新的文件名
 */
function upload($name = 'file', $path = '', $size = 1000000, $type = ['jpg', 'jpeg', 'png', 'gif'])
{
    //获取上传的文件
    $file = isset($_FILES[$name]) ? $_FILES[$name] : [];

    //判断是否为空
    if(empty($file))
    {
        ShowMsg('上传文件为空');
        return false;
    }

    //判断文件是否有上传错误
    $error = isset($file['error']) ? $file['error'] : 0;

    if($error > 0)
    {
        switch($error)
        {
            case 1:
                ShowMsg('超出了php.ini配置文件的限制大小');
                break;
            case 2:
                ShowMsg('超出了表单所限制的大小');
                break;
            case 3:
                ShowMsg('网络中断');
                break;
            case 4:
                ShowMsg('无文件上传');
                break;
            default:
                ShowMsg('未知错误');
        }
    }

    //判断文件大小是否有超过我们自己给的配置
    if($file['size'] > $size)
    {
        ShowMsg('文件大小已超过系统配置');
        exit;
    }

    //类型
    $ext = pathinfo($file['name'], PATHINFO_EXTENSION);

    //判断这个类型在不在数组里面
    if(!in_array($ext, $type))
    {
        ShowMsg('上传的类型有误，请重新选择');
        return false;
    }

    //判断所存放的文件目录是否存在
    if(!is_dir($path))
    {
        //如果文件夹不存在，我们帮他创建一个
        //$path 创建的路径
        // 0777 权限
        // true 是否递归创建
        $CreateRes = mkdir($path, 0777, true);

        if(!$CreateRes)
        {
            ShowMsg('文件夹创建失败');
            return false;
        }
    }

    //给上传的文件 起一个新的名字 cover3.png
    // 时间不能重复  时间戳 时间戳+10个长度的随机数+md5(cover3)
    // 名字+时间戳.后缀

    //纯文件名
    $filename = pathinfo($file['name'],PATHINFO_FILENAME);

    //时间戳
    $time = time();

    //拼接新名字
    $newname = $filename.'_'.$time.".".$ext;

    // /hello/cover.png 
    $newname = $path.'/'.$newname;

    //判断一下文件上传的渠道是否是正确的 安全问题 
    // 判断文件是否是 http post 方式上传的
    if(!is_uploaded_file($file['tmp_name']))
    {
        ShowMsg('非法上传文件');
        return false;
    }

    //真正上传 实际上就是移动 newname 路径+文件名
    // move_uploaded_file 返回 true 否则false 
    if(move_uploaded_file($file['tmp_name'], $newname))
    {
        //返回新文件名回去
        return $newname;
    }
}


/**
 * 获取当前的网址
 */

function get_url()
{
    // 获取当前的完整地址
    $str = $_SERVER['PHP_SELF'] . '?';

    if($_GET){
        foreach($_GET as $k => $v){
            if($k != 'page'){
                $str.= $k.'='.$v.'&';
            }
        }
    }

    return $str;

}
 /**
  * 分页函数
  *@param string $current 当前页 page
  *@param string $count   记录总数 count
  *@param string $limit   每页显示多少条 limit
  *@param string $size    中间显示页码多少条
  *@param string $class   样式
  *@return string 组装的分页字符串
  */
  function page($current,$count,$limit,$size,$class='digg')
  {
    $str = '';
    if($count > $limit){
        // 算出总页数
        $pages = ceil($count / $limit);
        // 获取当前页面的url（带有参数的）
        $url = get_url();
        // 开始拼接分页
        $str.='<div class="'.$class.'">';

        // 判断当前页是否是1
        if($current == 1){
            $str.='<span class="disabled">首&nbsp;&nbsp;页</span>';
            $str.='<span class="disabled">上一页</span>';
        }else{
            $str.='<a href="'.$url.'page=1">首&nbsp;&nbsp;页</a>';
            $str.='<a href="'.$url.'page='.($current - 1).'">上一页</a>';
        }

        // 中间
        if($current<=floor($size / 2)){
            $start = 1;
            $end = $pages < $size ? $pages : $size;
        }elseif ($current >= $pages - floor($size / 2)) {
            $start = $pages - $size + 1 <= 0 ? 1 : $pages - $size + 1;
            $end = $pages;
        }else {
            $start = $current - floor($size / 2);
            $end = $current + floor($size / 2);
        }

        for($i=$start;$i<=$end;$i++){
            if($i==$current){
                $str.='<span class="current">'.$i.'</span>';
            }else{
                $str.='<a href="'.$url.'page='.$i.'">'.$i.'</a>';
            }
        }

        //最后
        if($pages==$current){
            $str .='<span class="disabled">下一页</span>';
            $str.='<span class="disabled">尾&nbsp;&nbsp;页  </span>';
        }else{
            $str.='<a href="'.$url.'page='.($current+1).'">下一页</a>';
            $str.='<a href="'.$url.'page='.$pages.'">尾&nbsp;&nbsp;页 </a>';
        }

        $str.='</div>';
    }

    return $str;
}

?>
